package com.zsrt.java.ch02;


/**
 * 用链表模拟的栈 先进后出 后进先出
 * @author zsrt
 *
 */
public class Stack {
	
	private Node head;
	
	public Stack(Node head){
		this.head =head;
	}
	
	
	/**
	 * 判断栈是否为空
	 * @return
	 */
	public boolean isEmpty(){
		
		Node p= this.head;//将头节点作为当前节点 p代表当前节点
		
		return p.getNext() == null;
	}
	
	
	/**
	 * 模拟入栈 ： 入栈是把数据放在头节点的第1个节点  因为这样效率最高 不需要循环
	 * @param node
	 */
	public void push(Node node){
		
		if(isEmpty()){ //空 直接插入
			this.head.setNext(node);
		}else{
			//把node插入到头节点的后面
			node.setNext(this.head.getNext());
			head.setNext(node);
		}
		
	}
	
	
	/**
	 * 模拟出栈  出栈返回的是头节点后面的第1个节点 因为这个效率最快
	 * @return
	 */
	public Node pop(){
		
		if(isEmpty()){
			return null;
		}
		
		//出栈的是接在头节点后的第1个节点  1 得到这个节点  2从栈中删除这个节点
		Node node  = this.head.getNext();
		this.head.setNext(node.getNext());
		return node;
	}
	

}
